package com.sisgesbyte.services.ventas;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Inject;

import com.sisgesbyte.common.ConstModAdministracion;
import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.common.Validaciones;
import com.sisgesbyte.dao.beanDao.FiltrosBean;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.dao.ventas.MantVendedorClienteDao;
import com.sisgesbyte.data.entity.ventas.VendedorClienteEntity;
import com.sisgesbyte.services.ventas.bean.FFVVBean;
import com.sisgesbyte.services.ventas.bean.FiltroVendedoClienteFO;
import com.sisgesbyte.services.ventas.bean.ListaFFVVJerarquiaResponse;
import com.sisgesbyte.services.ventas.bean.ListaVendedorClienteResponse;
import com.sisgesbyte.services.ventas.bean.VendedorClienteBean;

@Stateless
public class MantVendedorClienteServiceImpl implements
		MantVendedorClienteService {

	@EJB
	private MantVendedorClienteDao mantVendedorClienteDao;
	@EJB
	private MantenimientoFFVVService mantenimientoFFVVService;
	@Inject
	private Validaciones validaciones;

	@Override
	public ListaVendedorClienteResponse listaVendedorCliente(
			String codTransaccion, FiltroVendedoClienteFO filtroBean) {
		String mensajeTransaccionMetodo = "[listaVendedorCliente idTx="
				+ codTransaccion + "] - ";
		ListaVendedorClienteResponse response = new ListaVendedorClienteResponse();

		ListaFFVVJerarquiaResponse hijosFfvv = null;
		try {
			// capturamos subordinados de la FFVV
			hijosFfvv = mantenimientoFFVVService.listaJerarquiaFFVV(codTransaccion, filtroBean.getIdFfvv());
			if (!hijosFfvv.getCodigoRespuesta().equalsIgnoreCase(ConstantesInternasSistema.CODIGO_EXITO)) {
				System.out.println(mensajeTransaccionMetodo+ "No se encontro Data de FFVV ");
				response.setCodigoRespuesta(hijosFfvv.getCodigoRespuesta());
				response.setMensajeRespuesta(hijosFfvv.getMensajeRespuesta());
				return response;
			}
		} catch (Exception e) {
			System.out.println(mensajeTransaccionMetodo+ "Hubo un error al Obtener la lista de FFVV"+ e.getMessage());
			response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDT.replace("msj", mensajeTransaccionMetodo));
			return response;
		}

		List<VendedorClienteEntity> listaVendedorCliente = null;
		try {
			FiltrosSQLBean filtroSQL = new FiltrosSQLBean();
			List<Object> valores = new ArrayList<>();
			List<FiltrosBean> filtro = new ArrayList<FiltrosBean>();

			if (filtroBean.getActive() != null) {
				FiltrosBean listaActive = new FiltrosBean();
				List<String> campoActive = new ArrayList<String>();
				campoActive.add("cv.active");
				listaActive.setCampos(campoActive);
				listaActive.setOperador("=");
				filtro.add(listaActive);
				valores.add(filtroBean.getActive());
			}

			// filtro por vendedor
			if (filtroBean.getIdFfvv() > 0) {
				FiltrosBean listaFfvv = new FiltrosBean();
				List<String> campoFfvv = new ArrayList<String>();
				campoFfvv.add("cv.empleado_estructura_id");
				listaFfvv.setCampos(campoFfvv);
				listaFfvv.setOperador("in");
				listaFfvv.setNumeroValores(hijosFfvv.getListaJerarquiaFFVV().size());

				filtro.add(listaFfvv);
				for (FFVVBean ls : hijosFfvv.getListaJerarquiaFFVV()) {
					System.out.println("EMpleado Estructura ID : " + ls.getId());
					valores.add(ls.getId());
				}

			}

			filtroSQL.setListaFiltros(filtro);
			filtroSQL.setListaValores(valores);
			filtroSQL.setCampoOrden("co.razon_social");
			filtroSQL.setTipoOrden("asc");
			listaVendedorCliente = mantVendedorClienteDao.listaVendedorCliente(filtroSQL);
		} catch (Exception e) {
			System.out.println(mensajeTransaccionMetodo+ "Hubo un error al listar " + e);
			response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDT);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDT
					.replace("msj", mensajeTransaccionMetodo));
			return response;
		}

		if (listaVendedorCliente.size() > 0) {
			List<VendedorClienteBean> lista = new ArrayList<VendedorClienteBean>();
			for (VendedorClienteEntity row : listaVendedorCliente) {
				VendedorClienteBean bean = new VendedorClienteBean();
				bean.setActive(row.getActive());
				bean.setApellido(validaciones.validarCamposString(row
						.getApellido()));
				bean.setCategoriaClienteId(row.getCategoria_cliente_id());
				bean.setClienteId(row.getCliente_id());
				bean.setClienteLocalesId(row.getCliente_locales_id());
				bean.setCodLocal(validaciones.validarCamposString(row
						.getCod_local()));
				bean.setEmpleadoEstructuraId(row.getEmpleado_estructura_id());
				bean.setId(row.getId());
				bean.setNombre(validaciones.validarCamposString(row.getNombre()));
				bean.setNumDoc(validaciones.validarCamposString(row
						.getNum_doc()));
				bean.setRazonSocial(validaciones.validarCamposString(row
						.getRazon_social()));
				bean.setTipoIdentificacionId(row.getTipo_identificacion_id());
				bean.setZonaClienteLocalId(row.getZona_cliente_local_id());
				bean.setZonaFfvvId(row.getZona_ffvv_id());

				if (row.getTipo_identificacion_id() == 1) {
					bean.setNombreAmostrar(validaciones.validarCamposString(row
							.getRazon_social())
							+ " - "
							+ validaciones.validarCamposString(row
									.getCod_local()));
				} else {
					bean.setNombreAmostrar(validaciones.validarCamposString(row
							.getApellido())
							+ " "
							+ validaciones.validarCamposString(row.getNombre())
							+ " - "
							+ validaciones.validarCamposString(row
									.getCod_local()));
				}

				lista.add(bean);
			}
			response.setListaVendedorCliente(lista);
			response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
			response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
		} else {
			response.setCodigoRespuesta(ConstModAdministracion.MANT_LISTAR_COD_IDF);
			response.setMensajeRespuesta(ConstModAdministracion.MANT_LISTAR_MSJ_IDF
					.replace("msj", mensajeTransaccionMetodo));
		}

		return response;
	}

}
